﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HerGoS.Viaticos.Entities;
using HerGoS.ControlsUI;
using HerGoS.Viaticos.Engine;
using HerGoS.WebControlExtend;

namespace HerGoS.WebUI.Viaticos.Liquidaciones
{
    public partial class Liquidaciones_Listado : PageBase
    {

        #region Propiedades
        public List<Liquidacion> Liquidaciones
        {
            get
            {
                if (ViewState["Liquidaciones"] != null)
                    return (List<Liquidacion>)ViewState["Liquidaciones"];
                return null;
            }
            set
            {
                ViewState["Liquidaciones"] = value;
            }

        }
        #endregion


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Initialize();
                LoadGridLiquidacion(false);
            }

        }

        void Initialize()
        {
            this.GridLiquidacion.Settings(new GridViewExtBasic());
            this.btnNuevo.Settings(new ButtonExtText());
            this.btnRefresh.Settings(new ButtonExtText());
               this.btnFiltrar.Settings(new ButtonExtText());
            this.bntQuitarFiltros.Settings(new ButtonExtText());
            
            var result =  new[] { new { id = 0 , Descripcion = "--Todos--"}, new { id  = 1, Descripcion  = "Anticipo" }, new { id =2 , Descripcion = "Liquidacion Final" } };

            cboTipoLiquidacion.DataSource = result;
            cboTipoLiquidacion.DataTextField = "Descripcion";
            cboTipoLiquidacion.DataValueField = "id";
            cboTipoLiquidacion.DataBind();


        }

        private void LoadGridLiquidacion(bool cache)
        {
            if (!cache)
                this.Liquidaciones = GestorLiquidacion.Consultar();
            this.GridLiquidacion.DataSource = Liquidaciones;
            this.GridLiquidacion.DataBind();
        }


        protected void btnRefresh_Click(object sender, EventArgs e)
        {
            LoadGridLiquidacion(false);
        }



        protected void btnBorrar_Click(object sender, EventArgs e)
        {
            ImageButton btn = (ImageButton)sender;
            int index = Convert.ToInt32(btn.CommandArgument);
            int id = Convert.ToInt32(this.GridLiquidacion.DataKeys[index].Value);

            Liquidacion liquidacion = Liquidaciones.Find(c => c.OID == id);
            Liquidaciones.Remove(liquidacion);

            GestorLiquidacion.Eliminar(liquidacion);
            LoadGridLiquidacion(true);

        }

        protected void GridLiquidacion_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButtonExt Editar = e.Row.FindControl("btnEditar") as ImageButtonExt;
                if (Editar != null)
                {
                    Editar.Settings(new ImageButtonExtEdit());
                    int oid = DataBinder.Eval(e.Row.DataItem, "OID").ToInteger();
                    Editar.OnClientClick = "Editar(" + oid.ToString() + "); return false;";
                }

                ImageButtonExt Borrar = e.Row.FindControl("btnBorrar") as ImageButtonExt;
                if (Borrar != null)
                {
                    Borrar.Settings(new ImageButtonExtDelete());
                }
            }
        }

        protected void GridLiquidacion_PageIndexChanging(Object sender, GridViewPageEventArgs e)
        {
            this.GridLiquidacion.PageIndex = e.NewPageIndex;
            LoadGridLiquidacion(true);
        }


        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            List<Liquidacion> filtroResult = null;


            if (!string.IsNullOrEmpty(this.txtNumeroLiquidacion.Text))
            {
                filtroResult = Liquidaciones.FindAll(y => y.NumeroLiquidacion == Convert.ToInt32(this.txtNumeroLiquidacion.Text));
            }

            if (!string.IsNullOrEmpty(this.txtArea.Text))
            {
                filtroResult = Liquidaciones.FindAll(y => y.Area != null).FindAll(y => y.Area.Descripcion.ToLower().Contains(txtArea.Text.ToLower()));

            }

            if (!string.IsNullOrEmpty(this.txtApyNombre.Text))
            {
                filtroResult = Liquidaciones.FindAll(y => y.Persona != null).FindAll(y => y.Persona.NombresYApellidos.ToLower().Contains(txtApyNombre.Text.ToLower()));

            }


            if (!string.IsNullOrEmpty(this.txtNumeroLiquidacion.Text) && (!string.IsNullOrEmpty(this.txtArea.Text)) && (!string.IsNullOrEmpty(this.txtApyNombre.Text)))
            { //si selecciono por lo demas 

                filtroResult = Liquidaciones.FindAll(y => y.Area != null).FindAll(y => y.Area.Descripcion.ToLower().Contains(txtArea.Text.ToLower()))
                    .FindAll(y => y.NumeroLiquidacion == Convert.ToInt32(this.txtNumeroLiquidacion.Text))
                    .FindAll(y => y.Persona != null).FindAll(y => y.Persona.NombresYApellidos.ToLower().Contains(txtApyNombre.Text.ToLower()));
                
                //filtroResult = Liquidaciones.FindAll(y => (string.IsNullOrEmpty(this.txtArea.Text) ? true : y.Area != null ? y.Area.Descripcion == txtArea.Text : true)
                //    && string.IsNullOrEmpty(this.txtApyNombre.Text) ? true : y.Persona.NombresYApellidos.ToLower().Contains(txtApyNombre.Text.ToLower()));

            }

            this.GridLiquidacion.DataSource = filtroResult;
            this.GridLiquidacion.DataBind();

       
        }
        protected void cboTipoLiquidacion_Changed(object sender, EventArgs e)
        {

            List<Liquidacion> filtroResult = null;

            
            var res = cboTipoLiquidacion.SelectedValue.ToInteger();
            if (res == 0)
            {
                filtroResult = Liquidaciones.ToList();
            }
            else  if (res == 1)
            {
                filtroResult = Liquidaciones.Where(y => y.Anticipo).ToList();
            }
            else
            {
                filtroResult = Liquidaciones.Where(y => !y.Anticipo).ToList();
            }



            this.GridLiquidacion.DataSource = filtroResult;
            this.GridLiquidacion.DataBind();
        
        }

        protected void btnQuitarFiltros_Click(object sender, EventArgs e)
        {
            this.txtApyNombre.Text = string.Empty;
            this.txtArea.Text = string.Empty;
            this.txtNumeroLiquidacion.Text = string.Empty;
            this.cboTipoLiquidacion.SelectedIndex = 0; 
            LoadGridLiquidacion(true);

        }

    }
}